home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / MacGzip 1.0 / source / Mac / MacAE.c < prev    next >
Text File  |  1995-08-31  |  4KB  |  162 lines

  1. /*
  2.  * MacAE.c, (C) SPDsoft
  3.  * 1994, MacGzip 0.3
  4.  * August 18, 1995; 1.0
  5.  */
  6.  
  7. #include <AppleEvents.h>
  8. #include "MacAE.h"
  9. #include "FileTypes.h"
  10. #include "Globals.h"
  11. #include "Work.h"
  12.  
  13. /******************************************************************************/
  14. /* key codes
  15.  *
  16.  * I get these values from the inspection of return values  of GetKeys
  17.  * I have no idea about if they are defined somewhere...
  18.  * If you are interested, you can get 'GetKeys' Application from
  19.  * ftp://ivo.cps.unizar.es/SPDsoft/
  20.  */
  21.  
  22. #define IsOptKey(a)        a[1] & 0x00000004    /* 0x3a in keyboard layout (?) */
  23. #define IsShiftKey(a)    a[1] & 0x00000001    /* 0x38 in keyboard layout (?) */
  24. #define IsCtrlKey(a)    a[1] & 0x00000008
  25.  
  26. #define IsAKey(a)        a[0] & 0x01000000    /* 0x00 in keyboard layout (?) */
  27. #define IsBKey(a)        a[0] & 0x00080000    /* 0x0b in keyboard layout (?) */
  28. #define IsMKey(a)        a[1] & 0x00400000    /* 0x2e in keyboard layout (?) */
  29.  
  30.  
  31. /******************************************************************************/
  32.  
  33. #define kDropSoundID    129
  34.  
  35. static OSErr MyGotRequiredParams (AppleEvent *theAppleEvent);
  36.  
  37. /******************************************************************************/
  38. /* Standard AE */
  39.  
  40. pascal OSErr  MyHandleODoc (    AppleEvent *theAppleEvent,
  41.                                 AppleEvent* reply,
  42.                                 long handlerRefCon    )
  43. {
  44.     FSSpec        myFSS;
  45.     AEDescList    docList;
  46.     OSErr        AEerr, res;
  47.     long        index,
  48.                 itemsInList;
  49.     Size        actualSize;
  50.     AEKeyword    keywd;
  51.     DescType    returnedType;
  52.     KeyMap        theKeys;
  53.  
  54.     AEerr = AEGetParamDesc (theAppleEvent, keyDirectObject, typeAEList, &docList);
  55.     if (AEerr)
  56.             return AEerr;
  57.  
  58.     AEerr = MyGotRequiredParams (theAppleEvent);
  59.     if (AEerr)
  60.             return AEerr;
  61.  
  62.     AEerr = AECountItems (&docList, &itemsInList);
  63.  
  64.     GetKeys(theKeys);
  65.     
  66.     if ( gPrefs.Misc.BeepWhenDone )
  67.         MyBeep( kDropSoundID );
  68.         
  69.     for (index = 1, res=0; index <= itemsInList; index++)
  70.     {
  71.             AEerr = AEGetNthPtr (&docList, index, typeFSS, &keywd,
  72.                     &returnedType, (Ptr) &myFSS, sizeof(myFSS), &actualSize);
  73.             if (AEerr)
  74.                     return AEerr;
  75.  
  76.             res = new_work(
  77.                         IsAKey (theKeys) ?
  78.                                             kAppKeyASCII :
  79.                         IsBKey (theKeys) ?
  80.                                             kAppKeyBin :
  81.                         IsMKey (theKeys) ?
  82.                                             kAppKeyMBin :
  83.                         0,
  84.                         
  85.                         gPrefs.Misc.Keys ?
  86.                         (
  87.                             IsOptKey( theKeys ) ?
  88.                                             kMisc_gzip :
  89.                             IsShiftKey( theKeys ) ?
  90.                                             kMisc_gunzip :
  91.                             kMisc_auto
  92.                                             
  93.                         )
  94.                         :
  95.                         kMisc_auto,
  96.                         gPrefs.Misc.Keys && IsCtrlKey(theKeys),
  97.                         &myFSS );
  98.                         
  99.     }
  100.  
  101.     AEerr = AEDisposeDesc (&docList);
  102.     
  103.     return res;
  104. }
  105.  
  106. pascal OSErr  MyHandlePDoc (    AppleEvent *theAppleEvent,
  107.                                 AppleEvent *reply,
  108.                                 long handlerRefCon    )
  109. {
  110.     /* can't print by now */
  111.     return ( errAEEventNotHandled );
  112. }
  113.  
  114. pascal OSErr  MyHandleOApp (    AppleEvent *theAppleEvent,
  115.                                 AppleEvent *reply,
  116.                                 long handlerRefCon    )
  117. {
  118.     gApp.StartupFiles = FALSE;
  119.             
  120.     return ( MyGotRequiredParams (theAppleEvent) );
  121. }
  122.  
  123.  
  124. pascal    OSErr    MyHandleQuit (    AppleEvent *theAppleEvent,
  125.                                 AppleEvent *reply,
  126.                                 long handlerRefcon    )
  127. {
  128.     OSErr            AEerr;
  129.     
  130.     if (noErr != (AEerr = MyGotRequiredParams(theAppleEvent)))
  131.     {
  132.         // an error occurred:  do the necessary error handling
  133.         return    AEerr;
  134.     }
  135.     
  136.     /* we should cleanup here */
  137.     
  138.     gApp.quit = TRUE;
  139.     
  140.     return ( noErr );
  141. }
  142.  
  143. /******************************************************************************/
  144. static OSErr MyGotRequiredParams (AppleEvent *theAppleEvent)
  145. {
  146.     DescType    returnedType;
  147.     Size        actualSize;
  148.     OSErr        myerr;
  149.  
  150.     myerr = AEGetAttributePtr (        theAppleEvent, keyMissedKeywordAttr,
  151.                                     typeWildCard, &returnedType, nil, 0,
  152.                                     &actualSize
  153.                                 );
  154.                                 
  155.     if (myerr == errAEDescNotFound)        // you got all the required parameters
  156.             return noErr;
  157.     else if (!myerr)                    // you missed a required parameter
  158.             return errAEEventNotHandled;
  159.     else                                // the call to AEGetAttributePtr failed
  160.             return myerr;
  161. }
  162.